/*!	 value_transformation.h
**	 Affine Transformation of ValueBase class
**
**	......... ... 2013 Ivan Mahonin
**
**	This package is free software; you can redistribute it and/or
**	modify it under the terms of the GNU General Public License as
**	published by the Free Software Foundation; either version 2 of
**	the License, or (at your option) any later version.
**
**	This package is distributed in the hope that it will be useful,
**	but WITHOUT ANY WARRANTY; without even the implied warranty of
**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
**	General Public License for more details.
**
*/

#ifndef __SYNFIG_VALUE_TRANSFORMATION_H
#define __SYNFIG_VALUE_TRANSFORMATION_H

#include "value.h"
#include "transformation.h"

namespace synfig
{

/*!	\class ValueTransformation
**	TODO:  writeme
*/
class ValueTransformation
{
private:
    // it's static class
    ValueTransformation() { }

public:
    static bool check_type(Type &type)
    {
        return type == type_angle
               || type == type_bline_point
               || type == type_matrix
               || type == type_segment
               || type == type_transformation
               || type == type_vector
               || type == type_width_point;
    }

    static bool check_type(const ValueBase &value)
    {
        return check_type(value.get_type());
    }

    static ValueBase transform(const Transformation &transformation, const ValueBase &value);

    static ValueBase back_transform(const Transformation &transformation, const ValueBase &value)
    {
        return transform(transformation.get_back_transformation(), value);
    }
};

}; // END of namespace synfig

#endif